<?php
/**
 * Просмотр данных пользователя.
 *
 * @property Zend_Controller_Request_Http $_request
 * Users_Model_Controller
 */
class Users_ProfileController extends Users_Model_Abstract_ClientController implements Zend_Acl_Resource_Interface, Workset_Acl_Owner_Interface {
    const PROFILE_HELPER = 'Profile';

    /**
     * Получение идентификатора ресурса для Zend_Acl.
     *
     * @return string
     */
	public function getResourceId() {
		return 'OwnProfile';
	}

    /**
     * Получение идентификатора владельца для Zend_Acl.
     *
     * @return int
     */
	public function getOwnerId() {
        /** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
        return $profile->getProfileUser()->getId();
	}

    /**
     * Инициализация контроллера.
     *
     * @throws Zend_Exception
     * @return void
     */
	public function init() {
        /** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);

		// Проверка прав на просмотр и редактирование профиля пользователя.
		$oUser = Users_Model_User::getUser();
		// TODO Проверку прав доступа.
        // $profile->readOnly(!$oUser->isAllowed($this,'write'));
		$profile->readOnly(false);

		if ($profile->readOnly()) {
			if ($this->_request->isPost()) {
				throw new Zend_Exception('You do not have rights to change this profile.',403);
			}

			/* TODO Проверку прав доступа.
			if (!$oUser->isAllowed($this,'read')) {
				throw new Zend_Exception('You do not have rights to access to this profile.',403);
			}
			 */
		}

        // Вызов родительского метода.
        parent::init();
	}

	/**
	 * Отображение профиля пользователя.
     *
     * @return void
	 */
	public function editAction() {
  		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);

		if (Users_Model_User::getUser()->isGuest() || $this->_request->getParam('cancel')) {
			$profile->redirectToBackUrl();
		}

		$oForm = $profile->getProfileForm(null, true);
		$oForm->setTranslator($this->_translate);
		$oUser = $profile->getProfileUser();

		// В случае наличия POST данных, начинаем их обработку.
		$bValid = $this->_request->isPost() && $profile->validProfileForm($oForm);

		//echo '<pre>'; var_dump($oForm->getElement('user_new_password_confirm')); exit();

		// Вызываем действия для всех полей.
		$this->LoginAction(true);
		$this->LastNameAction(true);
		$this->FirstNameAction(true);
		$this->PatronymicAction(true);
		$this->EmailAction(true);
		$this->NewPasswordAction(true);
		$this->EmailMessagesAction(true);

		// Сохраняем все внесённые изменения.
		if ($bValid) {
			/** @var Workset_Controller_Action_Helper_FileTransfer[] $files */
			/** @noinspection PhpUndefinedMethodInspection */
			$files = $this->_helper->fileTransfer();

			if ($files) {
				/** @var Workset_File_Info $file */
				$file = current($files);

				if ($file instanceof Workset_File_Info) {
					$oUser->setAvatar($file->toArray(array('name', 'shortpath', 'size', 'ctime', 'mimetype')));
				}
			}

			$oUser->save();
		}
        // Копируем значения из глобальной формы.
		else {
            /** @var Zend_Form_Element $oElement */
			foreach ($profile->getProfileForm(null, true)->getElements() as $sName => $oElement) {
				if ($sName !== 'avatar' && $oElement->getValue()) {
                    /** @var Zend_Form_Element $oTargetElement */
                    $oTargetElement = $oForm->getElement($sName);
					$oTargetElement->setValue($oElement->getValue());
				}
			}
		}

		// Запоминаем объекты для вывода в шаблоне.
        /** @noinspection PhpUndefinedFieldInspection */
        $this->view->form = $oForm;
		$this->view->login = $oUser->getLogin();
		$this->view->msg = $this->_translate;

		// Задаём путь к аватарке.
		$avatar = $oUser->getAvatar();

        if ($avatar) {
            /** @var Workset_Controller_Action_Helper_ImageUri $helper */
		    $helper = $this->_helper->getHelper('imageUri');

            /** @noinspection PhpUndefinedFieldInspection */
		    $this->view->avatar = $helper->direct($avatar, 110, 62, 1, 1);
        }

	}

	/**
	 * Изменение логина пользователя.
	 */
	public function LoginAction($bNotSave = false) {
        /** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileLoginAction($bNotSave);
	}

	/**
	 * Применение подтверждённых изменений логина пользователя.
	 */
	public function LoginConfirmAction() {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileLoginConfirmAction();
	}

	/**
	 * Изменение фамилии пользователя.
	 */
	public function LastNameAction($bNotSave = false) {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileLastNameAction($bNotSave);
	}

	/**
	 * Изменение имени пользователя.
	 */
	public function FirstNameAction($bNotSave = false) {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileFirstNameAction($bNotSave);
	}

	/**
	 * Изменение отчества пользователя.
	 */
	public function PatronymicAction($bNotSave = false) {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profilePatronymicAction($bNotSave);
	}

	/**
	 * Изменение электронного адреса пользователя.
	 */
	public function EmailAction($bNotSave = false) {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileEmailAction($bNotSave);
	}

	/**
	 * Применение подтверждённых изменений адреса эл. почты пользователя.
	 */
	public function EmailConfirmAction() {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileEmailConfirmAction();
	}

	/**
	 * Задание нового пароля пользователя.
	 */
	public function NewPasswordAction($bNotSave = false) {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileNewPasswordAction($bNotSave);
	}

	/**
	 * Флаг получение извещений на почту.
	 */
	public function EmailMessagesAction($bNotSave = false) {
		/** @var Users_Helper_Profile $profile */
        $profile = $this->_helper->getHelper(self::PROFILE_HELPER);
		$profile->profileEmailMessageAction($bNotSave);
	}
}
?>